<!DOCTYPE HTML>
<!-- NewPage -->
<html lang="en">
<head><!-- start favicons snippet, use https://realfavicongenerator.net/ --><link rel="apple-touch-icon" sizes="180x180" href="/assets/apple-touch-icon.png"><link rel="icon" type="image/png" sizes="32x32" href="/assets/favicon-32x32.png"><link rel="icon" type="image/png" sizes="16x16" href="/assets/favicon-16x16.png"><link rel="manifest" href="/assets/site.webmanifest"><link rel="mask-icon" href="/assets/safari-pinned-tab.svg" color="#fc4d50"><link rel="shortcut icon" href="/assets/favicon.ico"><meta name="msapplication-TileColor" content="#ffc40d"><meta name="msapplication-config" content="/assets/browserconfig.xml"><meta name="theme-color" content="#ffffff"><!-- end favicons snippet -->
<title>VideoRendererEventListener (ExoPlayer library)</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../jquery/jquery-ui.css" title="Style">
<script type="text/javascript" src="../../../../../script.js"></script>
<script type="text/javascript" src="../../../../../jquery/jszip/dist/jszip.min.js"></script>
<script type="text/javascript" src="../../../../../jquery/jszip-utils/dist/jszip-utils.min.js"></script>
<!--[if IE]>
<script type="text/javascript" src="../../../../../jquery/jszip-utils/dist/jszip-utils-ie.min.js"></script>
<![endif]-->
<script type="text/javascript" src="../../../../../jquery/jquery-3.5.1.js"></script>
<script type="text/javascript" src="../../../../../jquery/jquery-ui.js"></script>
</head>
<body>
<script type="text/javascript"><!--
    try {
        if (location.href.indexOf('is-external=true') == -1) {
            parent.document.title="VideoRendererEventListener (ExoPlayer library)";
        }
    }
    catch(err) {
    }
//-->
var data = {"i0":18,"i1":18,"i2":18,"i3":18,"i4":18,"i5":18,"i6":18,"i7":18,"i8":50,"i9":18,"i10":18};
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],16:["t5","Default Methods"],32:["t6","Deprecated Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
var tableTab = "tableTab";
var activeTableTab = "activeTableTab";
var pathtoroot = "../../../../../";
var useModuleDirectories = false;
loadScripts(document, 'script');</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<header role="banner">
<nav role="navigation">
<div class="fixedNav">
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a id="navbar.top">
<!--   -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a id="navbar.top.firstrow">
<!--   -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../../index.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../../../../allclasses.html">All&nbsp;Classes</a></li>
</ul>
<ul class="navListSearch">
<li><label for="search">SEARCH:</label>
<input type="text" id="search" value="search" disabled="disabled">
<input type="reset" id="reset" value="reset" disabled="disabled">
</li>
</ul>
<div>
<script type="text/javascript"><!--
  allClassesLink = document.getElementById("allclasses_navbar_top");
  if(window==top) {
    allClassesLink.style.display = "block";
  }
  else {
    allClassesLink.style.display = "none";
  }
  //-->
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a id="skip.navbar.top">
<!--   -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
</div>
<div class="navPadding">&nbsp;</div>
<script type="text/javascript"><!--
$('.navPadding').css('padding-top', $('.fixedNav').css("height"));
//-->
</script>
</nav>
</header>
<!-- ======== START OF CLASS DATA ======== -->
<main role="main">
<div class="header">
<div class="subTitle"><span class="packageLabelInType">Package</span>&nbsp;<a href="package-summary.html">com.google.android.exoplayer2.video</a></div>
<h2 title="Interface VideoRendererEventListener" class="title">Interface VideoRendererEventListener</h2>
</div>
<div class="contentContainer">
<div class="description">
<ul class="blockList">
<li class="blockList">
<dl>
<dt>All Known Implementing Classes:</dt>
<dd><code><a href="../analytics/AnalyticsCollector.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsCollector</a></code></dd>
</dl>
<hr>
<pre>public interface <span class="typeNameLabel">VideoRendererEventListener</span></pre>
<div class="block">Listener of video <a href="../Renderer.html" title="interface in com.google.android.exoplayer2"><code>Renderer</code></a> events. All methods have no-op default implementations to
 allow selective overrides.</div>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- ======== NESTED CLASS SUMMARY ======== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="nested.class.summary">
<!--   -->
</a>
<h3>Nested Class Summary</h3>
<table class="memberSummary">
<caption><span>Nested Classes</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colSecond" scope="col">Interface</th>
<th class="colLast" scope="col">Description</th>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static class&nbsp;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="VideoRendererEventListener.EventDispatcher.html" title="class in com.google.android.exoplayer2.video">VideoRendererEventListener.EventDispatcher</a></span></code></th>
<td class="colLast">
<div class="block">Dispatches events to a <a href="VideoRendererEventListener.html" title="interface in com.google.android.exoplayer2.video"><code>VideoRendererEventListener</code></a>.</div>
</td>
</tr>
</table>
</li>
</ul>
</section>
<!-- ========== METHOD SUMMARY =========== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="method.summary">
<!--   -->
</a>
<h3>Method Summary</h3>
<table class="memberSummary">
<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t5" class="tableTab"><span><a href="javascript:show(16);">Default Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t6" class="tableTab"><span><a href="javascript:show(32);">Deprecated Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colSecond" scope="col">Method</th>
<th class="colLast" scope="col">Description</th>
</tr>
<tr id="i0" class="altColor">
<td class="colFirst"><code>default void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onDroppedFrames(int,long)">onDroppedFrames</a></span>&#8203;(int&nbsp;count,
               long&nbsp;elapsedMs)</code></th>
<td class="colLast">
<div class="block">Called to report the number of frames dropped by the renderer.</div>
</td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code>default void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onRenderedFirstFrame(java.lang.Object,long)">onRenderedFirstFrame</a></span>&#8203;(<a href="https://developer.android.com/reference/java/lang/Object.html" title="class or interface in java.lang" class="externalLink" target="_top">Object</a>&nbsp;output,
                    long&nbsp;renderTimeMs)</code></th>
<td class="colLast">
<div class="block">Called when a frame is rendered for the first time since setting the output, or since the
 renderer was reset, or since the stream being rendered was changed.</div>
</td>
</tr>
<tr id="i2" class="altColor">
<td class="colFirst"><code>default void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onVideoCodecError(java.lang.Exception)">onVideoCodecError</a></span>&#8203;(<a href="https://developer.android.com/reference/java/lang/Exception.html" title="class or interface in java.lang" class="externalLink" target="_top">Exception</a>&nbsp;videoCodecError)</code></th>
<td class="colLast">
<div class="block">Called when a video decoder encounters an error.</div>
</td>
</tr>
<tr id="i3" class="rowColor">
<td class="colFirst"><code>default void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onVideoDecoderInitialized(java.lang.String,long,long)">onVideoDecoderInitialized</a></span>&#8203;(<a href="https://developer.android.com/reference/java/lang/String.html" title="class or interface in java.lang" class="externalLink" target="_top">String</a>&nbsp;decoderName,
                         long&nbsp;initializedTimestampMs,
                         long&nbsp;initializationDurationMs)</code></th>
<td class="colLast">
<div class="block">Called when a decoder is created.</div>
</td>
</tr>
<tr id="i4" class="altColor">
<td class="colFirst"><code>default void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onVideoDecoderReleased(java.lang.String)">onVideoDecoderReleased</a></span>&#8203;(<a href="https://developer.android.com/reference/java/lang/String.html" title="class or interface in java.lang" class="externalLink" target="_top">String</a>&nbsp;decoderName)</code></th>
<td class="colLast">
<div class="block">Called when a decoder is released.</div>
</td>
</tr>
<tr id="i5" class="rowColor">
<td class="colFirst"><code>default void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onVideoDisabled(com.google.android.exoplayer2.decoder.DecoderCounters)">onVideoDisabled</a></span>&#8203;(<a href="../decoder/DecoderCounters.html" title="class in com.google.android.exoplayer2.decoder">DecoderCounters</a>&nbsp;counters)</code></th>
<td class="colLast">
<div class="block">Called when the renderer is disabled.</div>
</td>
</tr>
<tr id="i6" class="altColor">
<td class="colFirst"><code>default void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onVideoEnabled(com.google.android.exoplayer2.decoder.DecoderCounters)">onVideoEnabled</a></span>&#8203;(<a href="../decoder/DecoderCounters.html" title="class in com.google.android.exoplayer2.decoder">DecoderCounters</a>&nbsp;counters)</code></th>
<td class="colLast">
<div class="block">Called when the renderer is enabled.</div>
</td>
</tr>
<tr id="i7" class="rowColor">
<td class="colFirst"><code>default void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onVideoFrameProcessingOffset(long,int)">onVideoFrameProcessingOffset</a></span>&#8203;(long&nbsp;totalProcessingOffsetUs,
                            int&nbsp;frameCount)</code></th>
<td class="colLast">
<div class="block">Called to report the video processing offset of video frames processed by the video renderer.</div>
</td>
</tr>
<tr id="i8" class="altColor">
<td class="colFirst"><code>default void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onVideoInputFormatChanged(com.google.android.exoplayer2.Format)">onVideoInputFormatChanged</a></span>&#8203;(<a href="../Format.html" title="class in com.google.android.exoplayer2">Format</a>&nbsp;format)</code></th>
<td class="colLast">
<div class="block"><span class="deprecatedLabel">Deprecated.</span>
<div class="deprecationComment">Use <a href="#onVideoInputFormatChanged(com.google.android.exoplayer2.Format,com.google.android.exoplayer2.decoder.DecoderReuseEvaluation)"><code>onVideoInputFormatChanged(Format, DecoderReuseEvaluation)</code></a>.</div>
</div>
</td>
</tr>
<tr id="i9" class="rowColor">
<td class="colFirst"><code>default void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onVideoInputFormatChanged(com.google.android.exoplayer2.Format,com.google.android.exoplayer2.decoder.DecoderReuseEvaluation)">onVideoInputFormatChanged</a></span>&#8203;(<a href="../Format.html" title="class in com.google.android.exoplayer2">Format</a>&nbsp;format,
                         <a href="../decoder/DecoderReuseEvaluation.html" title="class in com.google.android.exoplayer2.decoder">DecoderReuseEvaluation</a>&nbsp;decoderReuseEvaluation)</code></th>
<td class="colLast">
<div class="block">Called when the format of the media being consumed by the renderer changes.</div>
</td>
</tr>
<tr id="i10" class="altColor">
<td class="colFirst"><code>default void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onVideoSizeChanged(com.google.android.exoplayer2.video.VideoSize)">onVideoSizeChanged</a></span>&#8203;(<a href="VideoSize.html" title="class in com.google.android.exoplayer2.video">VideoSize</a>&nbsp;videoSize)</code></th>
<td class="colLast">
<div class="block">Called before a frame is rendered for the first time since setting the surface, and each time
 there's a change in the size, rotation or pixel aspect ratio of the video being rendered.</div>
</td>
</tr>
</table>
</li>
</ul>
</section>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ============ METHOD DETAIL ========== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="method.detail">
<!--   -->
</a>
<h3>Method Detail</h3>
<a id="onVideoEnabled(com.google.android.exoplayer2.decoder.DecoderCounters)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onVideoEnabled</h4>
<pre class="methodSignature">default&nbsp;void&nbsp;onVideoEnabled&#8203;(<a href="../decoder/DecoderCounters.html" title="class in com.google.android.exoplayer2.decoder">DecoderCounters</a>&nbsp;counters)</pre>
<div class="block">Called when the renderer is enabled.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>counters</code> - <a href="../decoder/DecoderCounters.html" title="class in com.google.android.exoplayer2.decoder"><code>DecoderCounters</code></a> that will be updated by the renderer for as long as it
     remains enabled.</dd>
</dl>
</li>
</ul>
<a id="onVideoDecoderInitialized(java.lang.String,long,long)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onVideoDecoderInitialized</h4>
<pre class="methodSignature">default&nbsp;void&nbsp;onVideoDecoderInitialized&#8203;(<a href="https://developer.android.com/reference/java/lang/String.html" title="class or interface in java.lang" class="externalLink" target="_top">String</a>&nbsp;decoderName,
                                       long&nbsp;initializedTimestampMs,
                                       long&nbsp;initializationDurationMs)</pre>
<div class="block">Called when a decoder is created.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>decoderName</code> - The decoder that was created.</dd>
<dd><code>initializedTimestampMs</code> - <a href="https://developer.android.com/reference/android/os/SystemClock.html#elapsedRealtime()" title="class or interface in android.os" class="externalLink" target="_top"><code>SystemClock.elapsedRealtime()</code></a> when initialization
     finished.</dd>
<dd><code>initializationDurationMs</code> - The time taken to initialize the decoder in milliseconds.</dd>
</dl>
</li>
</ul>
<a id="onVideoInputFormatChanged(com.google.android.exoplayer2.Format)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onVideoInputFormatChanged</h4>
<pre class="methodSignature"><a href="https://developer.android.com/reference/java/lang/Deprecated.html" title="class or interface in java.lang" class="externalLink" target="_top">@Deprecated</a>
default&nbsp;void&nbsp;onVideoInputFormatChanged&#8203;(<a href="../Format.html" title="class in com.google.android.exoplayer2">Format</a>&nbsp;format)</pre>
<div class="deprecationBlock"><span class="deprecatedLabel">Deprecated.</span>
<div class="deprecationComment">Use <a href="#onVideoInputFormatChanged(com.google.android.exoplayer2.Format,com.google.android.exoplayer2.decoder.DecoderReuseEvaluation)"><code>onVideoInputFormatChanged(Format, DecoderReuseEvaluation)</code></a>.</div>
</div>
</li>
</ul>
<a id="onVideoInputFormatChanged(com.google.android.exoplayer2.Format,com.google.android.exoplayer2.decoder.DecoderReuseEvaluation)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onVideoInputFormatChanged</h4>
<pre class="methodSignature">default&nbsp;void&nbsp;onVideoInputFormatChanged&#8203;(<a href="../Format.html" title="class in com.google.android.exoplayer2">Format</a>&nbsp;format,
                                       @Nullable
                                       <a href="../decoder/DecoderReuseEvaluation.html" title="class in com.google.android.exoplayer2.decoder">DecoderReuseEvaluation</a>&nbsp;decoderReuseEvaluation)</pre>
<div class="block">Called when the format of the media being consumed by the renderer changes.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>format</code> - The new format.</dd>
<dd><code>decoderReuseEvaluation</code> - The result of the evaluation to determine whether an existing
     decoder instance can be reused for the new format, or <code>null</code> if the renderer did not
     have a decoder.</dd>
</dl>
</li>
</ul>
<a id="onDroppedFrames(int,long)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onDroppedFrames</h4>
<pre class="methodSignature">default&nbsp;void&nbsp;onDroppedFrames&#8203;(int&nbsp;count,
                             long&nbsp;elapsedMs)</pre>
<div class="block">Called to report the number of frames dropped by the renderer. Dropped frames are reported
 whenever the renderer is stopped having dropped frames, and optionally, whenever the count
 reaches a specified threshold whilst the renderer is started.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>count</code> - The number of dropped frames.</dd>
<dd><code>elapsedMs</code> - The duration in milliseconds over which the frames were dropped. This duration
     is timed from when the renderer was started or from when dropped frames were last reported
     (whichever was more recent), and not from when the first of the reported drops occurred.</dd>
</dl>
</li>
</ul>
<a id="onVideoFrameProcessingOffset(long,int)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onVideoFrameProcessingOffset</h4>
<pre class="methodSignature">default&nbsp;void&nbsp;onVideoFrameProcessingOffset&#8203;(long&nbsp;totalProcessingOffsetUs,
                                          int&nbsp;frameCount)</pre>
<div class="block">Called to report the video processing offset of video frames processed by the video renderer.

 <p>Video processing offset represents how early a video frame is processed compared to the
 player's current position. For each video frame, the offset is calculated as <em>P<sub>vf</sub>
 - P<sub>pl</sub></em> where <em>P<sub>vf</sub></em> is the presentation timestamp of the video
 frame and <em>P<sub>pl</sub></em> is the current position of the player. Positive values
 indicate the frame was processed early enough whereas negative values indicate that the
 player's position had progressed beyond the frame's timestamp when the frame was processed (and
 the frame was probably dropped).

 <p>The renderer reports the sum of video processing offset samples (one sample per processed
 video frame: dropped, skipped or rendered) and the total number of samples.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>totalProcessingOffsetUs</code> - The sum of all video frame processing offset samples for the
     video frames processed by the renderer in microseconds.</dd>
<dd><code>frameCount</code> - The number of samples included in the <code>totalProcessingOffsetUs</code>.</dd>
</dl>
</li>
</ul>
<a id="onVideoSizeChanged(com.google.android.exoplayer2.video.VideoSize)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onVideoSizeChanged</h4>
<pre class="methodSignature">default&nbsp;void&nbsp;onVideoSizeChanged&#8203;(<a href="VideoSize.html" title="class in com.google.android.exoplayer2.video">VideoSize</a>&nbsp;videoSize)</pre>
<div class="block">Called before a frame is rendered for the first time since setting the surface, and each time
 there's a change in the size, rotation or pixel aspect ratio of the video being rendered.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>videoSize</code> - The new size of the video.</dd>
</dl>
</li>
</ul>
<a id="onRenderedFirstFrame(java.lang.Object,long)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onRenderedFirstFrame</h4>
<pre class="methodSignature">default&nbsp;void&nbsp;onRenderedFirstFrame&#8203;(<a href="https://developer.android.com/reference/java/lang/Object.html" title="class or interface in java.lang" class="externalLink" target="_top">Object</a>&nbsp;output,
                                  long&nbsp;renderTimeMs)</pre>
<div class="block">Called when a frame is rendered for the first time since setting the output, or since the
 renderer was reset, or since the stream being rendered was changed.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>output</code> - The output of the video renderer. Normally a <a href="https://developer.android.com/reference/android/view/Surface.html" title="class or interface in android.view" class="externalLink" target="_top"><code>Surface</code></a>, however some video
     renderers may have other output types (e.g., a <a href="VideoDecoderOutputBufferRenderer.html" title="interface in com.google.android.exoplayer2.video"><code>VideoDecoderOutputBufferRenderer</code></a>).</dd>
<dd><code>renderTimeMs</code> - The <a href="https://developer.android.com/reference/android/os/SystemClock.html#elapsedRealtime()" title="class or interface in android.os" class="externalLink" target="_top"><code>SystemClock.elapsedRealtime()</code></a> when the frame was rendered.</dd>
</dl>
</li>
</ul>
<a id="onVideoDecoderReleased(java.lang.String)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onVideoDecoderReleased</h4>
<pre class="methodSignature">default&nbsp;void&nbsp;onVideoDecoderReleased&#8203;(<a href="https://developer.android.com/reference/java/lang/String.html" title="class or interface in java.lang" class="externalLink" target="_top">String</a>&nbsp;decoderName)</pre>
<div class="block">Called when a decoder is released.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>decoderName</code> - The decoder that was released.</dd>
</dl>
</li>
</ul>
<a id="onVideoDisabled(com.google.android.exoplayer2.decoder.DecoderCounters)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onVideoDisabled</h4>
<pre class="methodSignature">default&nbsp;void&nbsp;onVideoDisabled&#8203;(<a href="../decoder/DecoderCounters.html" title="class in com.google.android.exoplayer2.decoder">DecoderCounters</a>&nbsp;counters)</pre>
<div class="block">Called when the renderer is disabled.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>counters</code> - <a href="../decoder/DecoderCounters.html" title="class in com.google.android.exoplayer2.decoder"><code>DecoderCounters</code></a> that were updated by the renderer.</dd>
</dl>
</li>
</ul>
<a id="onVideoCodecError(java.lang.Exception)">
<!--   -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>onVideoCodecError</h4>
<pre class="methodSignature">default&nbsp;void&nbsp;onVideoCodecError&#8203;(<a href="https://developer.android.com/reference/java/lang/Exception.html" title="class or interface in java.lang" class="externalLink" target="_top">Exception</a>&nbsp;videoCodecError)</pre>
<div class="block">Called when a video decoder encounters an error.

 <p>This method being called does not indicate that playback has failed, or that it will fail.
 The player may be able to recover from the error. Hence applications should <em>not</em>
 implement this method to display a user visible error or initiate an application level retry.
 <a href="../Player.Listener.html#onPlayerError(com.google.android.exoplayer2.ExoPlaybackException)"><code>Player.Listener.onPlayerError(com.google.android.exoplayer2.ExoPlaybackException)</code></a> is the appropriate place to implement such behavior. This
 method is called to provide the application with an opportunity to log the error if it wishes
 to do so.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>videoCodecError</code> - The error. Typically a <a href="https://developer.android.com/reference/android/media/MediaCodec.CodecException.html" title="class or interface in android.media" class="externalLink" target="_top"><code>MediaCodec.CodecException</code></a> if the renderer uses
     <a href="https://developer.android.com/reference/android/media/MediaCodec.html" title="class or interface in android.media" class="externalLink"><code>MediaCodec</code></a>, or a <a href="../decoder/DecoderException.html" title="class in com.google.android.exoplayer2.decoder" target="_top"><code>DecoderException</code></a> if the renderer uses a software decoder.</dd>
</dl>
</li>
</ul>
</li>
</ul>
</section>
</li>
</ul>
</div>
</div>
</main>
<!-- ========= END OF CLASS DATA ========= -->
<footer role="contentinfo">
<nav role="navigation">
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a id="navbar.bottom">
<!--   -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a id="navbar.bottom.firstrow">
<!--   -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../../index.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../../../../allclasses.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
  allClassesLink = document.getElementById("allclasses_navbar_bottom");
  if(window==top) {
    allClassesLink.style.display = "block";
  }
  else {
    allClassesLink.style.display = "none";
  }
  //-->
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a id="skip.navbar.bottom">
<!--   -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
</nav>
</footer>
</body>
</html>
